package pwd.allen;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
import pwd.allen.config.MyDubboConfig;

import java.io.IOException;
import java.util.Arrays;

/**
 * jar：dubbo-starter、dubbo相关jar
 *
 * dubbo整合springboot的不同方式
 * 1）在application配置文件配置属性，使用@DubboService暴露服务、@Reference引入服务，开启dubbo功能（@EnableDubbo，或者dubbo.scan.base-packages属性）
 *      实验：如果没注释@EnableDubbo，也能正常，但是如果配置了dubbo.enabled=false，则注入失败
 * 2）使用xml的dubbo配置，用@ImportResource导入配置文件，这种方式不需要注解，也不需要在application文件配置dubbo信息
 *      遇到问题：如果报错 Duplicate application configs。处理方式：application配置文件中禁用dubbo的自动化配置（dubbo.enabled=false）
 * 3）使用注解API的方式：用xxxConfig组成一个配置类，开启dubbo包扫描（@DubboComponentScan或者@EnableDubbo）
*   【这一步好像不是必要的，只要把dubbo组件弄成beanDefinition即可，因为这些组件本身利用了spring生命周期一些特性，在适当时刻做一些初始化操作】；
 *  即手动将每个组件创建到容器中，让dubbo扫描其他组件
 *
 *
 * @author 门那粒沙
 * @create 2019-10-03 17:24
 **/
//@ImportResource(locations = "classpath:provider.xml")
@EnableDubbo(scanBasePackages = {"pwd.allen.service.impl"})    //开启基于注解的dubbo功能
//@DubboComponentScan({"pwd.allen.config"})    //开启dubbo包扫描
@SpringBootApplication
public class BootProviderMain {
    public static void main(String[] args) throws IOException {
        SpringApplication.run(BootProviderMain.class, args);
        System.out.println("provider启动成功");
    }
}

